package com.adisi.objetos;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class Auto {
	
	private int idAuto = 0;
	private String dominioAuto = "      ";
	private String marcaAuto = "";
	private String modeloAuto = "";
	private int anoModeloAuto = 0;
	private String colorAuto = "";
	
	private boolean fumigadoAuto = false;
	private Date fechaFumigacionAuto = null;
	
	private boolean habilitadoAuto = false;
	private Date fechaHabilitacionAuto = null;
	
	private Dueno duenoAuto = null;
	
	private TipoCombustible tipoCombustibleAuto = TipoCombustible.DIESEL;
	
	private EstadoAuto estadoAuto = EstadoAuto.INACTIVO;
	
	private BigDecimal kms = BigDecimal.ZERO;
	
	private ArrayList<Alerta> alertas = null;
	
	private Alerta alertaCercana = null;
	private boolean alertaGrave = false;

	private int indexAlertaCercana = -1;
	
	
	
	
	/**
	 * @param idAuto
	 * @param dominioAuto
	 * @param marcaAuto
	 * @param modeloAuto
	 * @param anoModeloAuto
	 * @param colorAuto
	 * @param fumigadoAuto
	 * @param fechaFumigacionAuto
	 * @param habilitadoAuto
	 * @param fechaHabilitacionAuto
	 * @param duenoAuto
	 * @param tipoCombustibleAuto
	 * @param estadoAuto
	 */
	public Auto(int idAuto, String dominioAuto, String marcaAuto,
			String modeloAuto, int anoModeloAuto, String colorAuto,
			boolean fumigadoAuto, Date fechaFumigacionAuto,
			boolean habilitadoAuto, Date fechaHabilitacionAuto,
			Dueno duenoAuto, TipoCombustible tipoCombustibleAuto,
			EstadoAuto estadoAuto,
			BigDecimal kms) {
		super();
		this.idAuto = idAuto;
		this.dominioAuto = dominioAuto;
		this.marcaAuto = marcaAuto;
		this.modeloAuto = modeloAuto;
		this.anoModeloAuto = anoModeloAuto;
		this.colorAuto = colorAuto;
		this.fumigadoAuto = fumigadoAuto;
		this.fechaFumigacionAuto = fechaFumigacionAuto;
		this.habilitadoAuto = habilitadoAuto;
		this.fechaHabilitacionAuto = fechaHabilitacionAuto;
		this.duenoAuto = duenoAuto;
		this.tipoCombustibleAuto = tipoCombustibleAuto;
		this.estadoAuto = estadoAuto;
		this.kms = kms;
	}

	
	
	public Auto() {
		super();

	}



	public String getDominioAuto() {
		return dominioAuto;
	}

	public void setDominioAuto(String dominioAuto) {
		this.dominioAuto = dominioAuto;
	}

	public String getMarcaAuto() {
		return marcaAuto;
	}

	public void setMarcaAuto(String marcaAuto) {
		this.marcaAuto = marcaAuto;
	}

	public String getModeloAuto() {
		return modeloAuto;
	}

	public void setModeloAuto(String modeloAuto) {
		this.modeloAuto = modeloAuto;
	}

	public int getAnoModeloAuto() {
		return anoModeloAuto;
	}

	public void setAnoModeloAuto(int anoModeloAuto) {
		this.anoModeloAuto = anoModeloAuto;
	}

	public String getColorAuto() {
		return colorAuto;
	}

	public void setColorAuto(String colorAuto) {
		this.colorAuto = colorAuto;
	}
	
	public String getDescripcion() {
		return modeloAuto + ' ' + colorAuto + ' ' + dominioAuto;
	}

	public boolean isFumigadoAuto() {
		return fumigadoAuto;
	}

	public void setFumigadoAuto(boolean fumigadoAuto) {
		this.fumigadoAuto = fumigadoAuto;
	}

	public Date getFechaFumigacionAuto() {
		return fechaFumigacionAuto;
	}

	public void setFechaFumigacionAuto(Date fechaFumigacionAuto) {
		this.fechaFumigacionAuto = fechaFumigacionAuto;
	}

	public boolean isHabilitadoAuto() {
		return habilitadoAuto;
	}

	public void setHabilitadoAuto(boolean habilitadoAuto) {
		this.habilitadoAuto = habilitadoAuto;
	}

	public Date getFechaHabilitacionAuto() {
		return fechaHabilitacionAuto;
	}

	public void setFechaHabilitacionAuto(Date fechaHabilitacionAuto) {
		this.fechaHabilitacionAuto = fechaHabilitacionAuto;
	}

	public Dueno getDuenoAuto() {
		return duenoAuto;
	}

	public void setDuenoAuto(Dueno duenoAuto) {
		this.duenoAuto = duenoAuto;
	}

	public TipoCombustible getTipoCombustibleAuto() {
		return tipoCombustibleAuto;
	}

	public void setTipoCombustibleAuto(TipoCombustible tipoCombustibleAuto) {
		this.tipoCombustibleAuto = tipoCombustibleAuto;
	}

	public EstadoAuto getEstadoAuto() {
		return estadoAuto;
	}

	public void setEstadoAuto(EstadoAuto estadoAuto) {
		this.estadoAuto = estadoAuto;
	}

	public int getIdAuto() {

		return idAuto;
	}

	public void setIdAuto(int idAuto) {
		this.idAuto = idAuto;
	}



	public BigDecimal getKms() {
		return kms;
	}

	public void setKms(BigDecimal kms) {
		this.kms = kms;
	}



	public ArrayList<Alerta> getAlertas() {
		return alertas;
	}



	public void setAlertas(ArrayList<Alerta> alertas) {
		this.alertas = alertas;
		
		Date hoy = new Date();
		int md = Integer.MAX_VALUE;
		BigDecimal mk = new BigDecimal(Integer.MAX_VALUE);
		
		indexAlertaCercana = -1;
		
		for(int index = 0; index < alertas.size(); index++) {
			Alerta alerta = alertas.get(index);
			if(alerta.getTipoAlerta()=='F'){
				long dif = alerta.getFechaAlerta().getTime() - hoy.getTime();
				int dias =  (int)(dif / 1000 / 60 / 60 / 24);
				if(dias <=15)
					indexAlertaCercana = index;
				if(dias <=5) 
					alertaGrave = true;
				if (dias < md) {
					md = dias;
				}
			} else {
				BigDecimal dif = alerta.getKmAlerta().subtract(kms);
				
				if(dif.compareTo(new BigDecimal(2500))<=0)
					indexAlertaCercana = index;
				if(dif.compareTo(new BigDecimal(1000))<=0) 
					alertaGrave = true;
				if (dif.compareTo(mk)<0) {
					mk = new BigDecimal(dif.doubleValue());
				}				
			}
			
		}}


	public Alerta getAlertaCercana() {
		if(indexAlertaCercana>=0)
			return alertas.get(indexAlertaCercana);
		else
			return null;
	}


	public boolean isAlertaGrave() {
		return alertaGrave;
	}

	
}
